package br.com.faculdade.domain.service;

import br.com.faculdade.infrastructure.dao.ApartamentoDAO;
import br.com.faculdade.infrastructure.dao.TipoApartamentoDAO;
import br.com.faculdade.infrastructure.entity.Apartamento;
import br.com.faculdade.infrastructure.entity.TipoApartamento;
import java.io.Serializable;
import java.util.List;
import org.jboss.seam.annotations.AutoCreate;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.TransactionPropagationType;
import org.jboss.seam.annotations.Transactional;
import org.jboss.seam.log.Log;

/**
 *
 * @author Kirmaier
 */
@AutoCreate
@Name("apartamentoService")
@Transactional(TransactionPropagationType.SUPPORTS)
public class ApartamentoService implements Serializable {

    @Logger
    private Log log;
    @In
    private ApartamentoDAO apartamentoDAO;
    @In
    private TipoApartamentoDAO tipoApartamentoDAO;

    public void alterar(Apartamento apartamento, Integer tipoApartamentoSelecionado) {
        log.info("Invocando DAO para alterar apartamento");

        apartamento.setTipoApartamento(tipoApartamentoDAO.obterPorId(tipoApartamentoSelecionado));

        apartamentoDAO.alterar(apartamento);
    }

    public void cancelar() {
        log.info("Invocando DAO para cancelar operação");

        apartamentoDAO.cancelar();
    }

    public Apartamento criar() {
        log.info("Criar novo objeto");
        Apartamento apartamento = new Apartamento();
        apartamento.setTipoApartamento(new TipoApartamento());

        return apartamento;
    }

    public void excluir(Apartamento apartamento) {
        log.info("Invocando DAO para excluir apartamento");

        apartamentoDAO.excluir(apartamento);
    }

    public Apartamento obterPorId(Integer idapart) {
        log.info("Invocando DAO para pesquisar apartamento por ID");

        return apartamentoDAO.obterPorId(idapart);
    }

    public List<Apartamento> obterPorParametros(Integer paramNumeroApartamento, Integer paramNumeroQuartos, String paramDescricao, Integer tipoApartamento) {
        log.info("Invocando DAO para obter apartamentos por parametros");

        return apartamentoDAO.obterPorParametros(paramNumeroApartamento, paramNumeroQuartos, paramDescricao, tipoApartamento);
    }

    public List<TipoApartamento> obterTodosTiposApartamento() {
        log.info("Invocando DAO para obter todos tipos de apartamento");

        return tipoApartamentoDAO.obterTodos();
    }

    public void salvar(Apartamento apartamento, Integer tipoApartamentoSelecionado) {
        log.info("Invocando DAO para persistir o objeto");

        apartamento.setTipoApartamento(tipoApartamentoDAO.obterPorId(tipoApartamentoSelecionado));

        apartamentoDAO.salvar(apartamento);
    }
}
